以下是 Golang function 的基本語法:
func main() {
result := add(1, 2)
fmt.Println(result) // 3
}
func add(a, b int) int {
return a + b
}
func
為 Go function 的保留字,int
表示該函式的回傳型態為整數,而 a
和 b
則是函式的參數。在函式內部,使用 return
關鍵字回傳結果。
另外,如之前章節所說,如果 function 名稱第一個字母為大寫,表示能被其他 package 引用,例如:
// this function can be imported by other packages
func Add(a, b int) int {
return a + b
}
func main() {
result := func(a, b int) int {
return a + b
}(1, 2)
fmt.Println(result) // 3
}
這裡的 func(a, b int) int { return a + b }
就是一個匿名函式,我們立即呼叫它並傳入參數 1 和 2。
defer 關鍵字用於函式返回後才執行。例如:
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
// hello
// world
這段程式碼會先印出 "hello",然後再印出 "world"。儘管 defer
關鍵字位於 fmt.Println("world")
的前面,但它會在 main
函式結束前執行。
func main() {
addParams := &AddParams{
a: 1,
b: 2,
}
result := add(addParams)
fmt.Println(result) // 3
}
// ===
// use a struct as parameter for add function
type AddParams struct {
a int
b int
}
func add(params *AddParams) int { // 如上一章所說,這裡也可以傳入值,不用傳入指標
return params.a + params.b
}
func main() {
var addParams *AddParams // 使用 var 宣告指標變數,初始值為 nil
result, err := add(addParams)
if err != nil {
fmt.Println(err.Error()) // params is nil
return
}
fmt.Println(result)
}
// ===
type AddParams struct {
a int
b int
}
func add(params *AddParams) (int, error) {
if params == nil {
return 0, errors.New("params is nil")
}
return params.a + params.b, nil
}